/* typeof 只能返回有限的字符串类型，包括 “string”、“number”、“boolean”、“symbol”、“undefined” 和 “object”。
对于函数、数组、null 等类型，typeof 也会返回 “object”。因此，typeof 对于复杂类型和自定义类型的判断是有限的。
instanceof 操作符主要用于检查对象是否是特定类的实例，它无法检查基本类型。
*/

const isString = (str: any): str is string => typeof str === 'string'

const isNumber = (num: any): num is number => typeof num === 'number'

const isFn = (fn: any) => typeof fn === 'function'

const isObj = (obj: any) => ({}.toString.call(obj) === '[object Object]')

const fnQ = (data: any) => {
  let value
  if (isObj(data)) {
    Object.keys(data).forEach(key => {
      value = data[key]
      if (isString(value)) {
        data[key] = value.trim()
      }
      if (isNumber(value)) {
        data[key] = value.toFixed(2)
      }
      if (isFn(value)) {
        data[key]()
        // value() //this指向
      }
    })
  }
}
const objLl = {
  a: 100.22222,
  b: ' test  ',
  c: function () {
    console.log(this)
    return this.a
  },
}

fnQ(objLl)
